package _01_abstractDataType;

//ADT Set<T>   集合抽象数据类型
public interface Set<T> {   // 集合接口
 
 // 判断集合是否为空
 public abstract boolean isEmpty();
 
 // 返回集合的元素个数
 public abstract int size();
 
 // 根据传入的关键元素key在集合中寻找对应的特定元素并返回
 public abstract T searchByKey(T key);
 
 // 判断集合是否包含关键元素key
 public abstract boolean isContain(T key);
 
 // 向集合中添加一个元素t，添加成功返回true，失败返回false
 public abstract boolean add(T t);
 
 // 根据传入的关键元素key删除集合中对应的特定元素并返回删除的该元素
 public abstract T remove(T key);
 
 // 删除集合中所有的元素
 public abstract void clear();
 
 // 返回集合所有元素的描述字符串
 public abstract String toString();
 
 // 比较this与obj引用集合是否相等
 public abstract boolean equals(Object obj);
 
 // 返回包含集合所有元素的数组
 public abstract Object[] toArray();
 
 // 以下方法描述集合运算，参数是另一个集合

 // 判断是否包含Set的所有元素（是否子集）
 public abstract boolean isContainAll(Set<?> set);
 
 // 添加Set的所有元素，集合并运算。若修改，返回true
 public abstract boolean addAll(Set<? extends T> set);
 
 // 删除也包括在Set的集合差。若删除，返回true
 public abstract boolean removeAll(Set<?> set);
 
 // 仅保留那些也包含在Set里的元素，集合差。若删除，返回true
 public abstract boolean retainAll(Set<?> set);
 
}

